package controlador;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;

import modelo.Articulo;
import modelo.ArticuloDAO;
import modelo.Compra;
import modelo.CompraDAO;
import modelo.ItemCompra;
import modelo.ItemCompraDAO;
import modelo.Usuario;
import modelo.UsuarioDAO;
import controlador.FrontCommand;


public class CommandRegistrarCompra extends FrontCommand{


	public CommandRegistrarCompra() {

		// TODO Auto-generated constructor stub
	}


	public void process() throws ServletException, IOException {
		// TODO FALTA ELIMINAR EL ARTICULO


		ArrayList<ItemCompra> carritoCompra = (ArrayList<ItemCompra>) request.getSession().getAttribute("carritoCompra");
		ArrayList<Articulo> verCarrito = (ArrayList<Articulo>) request.getSession().getAttribute("verCarrito");
		boolean validar = true;

		for(int i=0; i<carritoCompra.size(); i++){

			if(  verCarrito.get(i).getExistencia() < carritoCompra.get(i).getCantidad()){
				validar = false;
				i = carritoCompra.size();
			}

		}


		if(validar == true){
			Compra compra = new Compra();
			ItemCompra itemCompra = new ItemCompra();
			CompraDAO compraDAO = new CompraDAO();
			ItemCompraDAO itemCompraDAO = new ItemCompraDAO();
			Articulo articulo = new Articulo();
			ArticuloDAO articuloDAO = new ArticuloDAO();
			ArrayList<ItemCompra> items  = new ArrayList<ItemCompra>();

			//El codigo de la Compra
			String codigoCompra = SiguienteCod();
			compra.setCodigo(codigoCompra);
			compra.setCedulaUsuario((String)request.getSession().getAttribute("cedula"));
			compra.setFecha(new Date());

			for(int i=0; i<carritoCompra.size(); i++){

				itemCompra = carritoCompra.get(i);

				itemCompra.setCodigoCompra(codigoCompra);

				items.add(itemCompra);

				//añediendo a la BD
				itemCompraDAO.registrarItemCompra(itemCompra);

				//Modificando el articulo;
				articulo = verCarrito.get(i);
				Double cant = articulo.getExistencia();
				cant -= carritoCompra.get(i).getCantidad();
				articulo.setExistencia(cant);
				articuloDAO.modificarArticulo(articulo);
			}

			//añediendo el array de itens a la compra aunque no es necesario
			compra.setItemsCompra(items);
			compraDAO.registrarCompra(compra);
			request.getSession().setAttribute("carritoCompra", null);
			request.getSession().setAttribute("verCarrito", null);

			response.sendRedirect("vista/paginamensaje.jsp?mensaje=Listo :D");

		} else {

			response.sendRedirect("vista/paginamensaje.jsp?mensaje=No se puede realizar la Compra porque los productos no satisfacen el pedido");
		}




	}


	private String SiguienteCod() {
		CompraDAO cd = new CompraDAO();
		Compra c;
		String cod;
		int mayor=-1;
		List<Compra> lc = cd.consultarCompras();
		for (int i = 0; i < lc.size(); i++) {
			c=lc.get(i);
			cod = c.getCodigo();
			int num = Integer.parseInt(cod);
			if(num>mayor)
				mayor=num;
		}
		
		mayor++;
		cod = String.valueOf(mayor);
		return cod;
	}
}